home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_1 / cel_nav.42 < prev    next >
Internet Message Format  |  1995-03-23  |  22KB

  1. From comp.sys.handhelds Mon Jan 28 16:08:39 1991
  2. Path: mentor.cc.purdue.edu!purdue!news.cs.indiana.edu!samsung!zaphod.mps.ohio-state.edu!ncar!ames!uhccux!akala!metcalf
  3. From: metcalf@akala.ifa.hawaii.edu (Tom Metcalf)
  4. Newsgroups: comp.sys.handhelds
  5. Subject: Re: Celestial Navigation with HP-48SX
  6. Summary: Version 4.2 fixes bug in 4.0
  7. Message-ID: <11161@uhccux.uhcc.Hawaii.Edu>
  8. Date: 28 Jan 91 19:20:48 GMT
  9. References: <11126@uhccux.uhcc.Hawaii.Edu>
  10. Sender: news@uhccux.uhcc.Hawaii.Edu
  11. Followup-To: comp.sys.handhelds
  12. Organization: Institute For Astronomy, Hawaii
  13. Lines: 1335
  14.  
  15.  
  16. Last week I posted version 4.0 of my sight reduction program.  There was
  17. a bug in the ADV program which caused it to crash when the speed from the
  18. INIT menu was set to zero.  Here is version 4.2 which corrects this 
  19. problem.  The instructions are unchanged and I have not reposted them.
  20.  
  21. The program with instructions is available via anonymous ftp from the machine
  22. mamane.ifa.hawaii.edu in the directory pub/metcalf.
  23.  
  24. Sorry for any inconvenience!
  25.  
  26. Tom Metcalf
  27. metcalf@uhifa.ifa.hawaii.edu
  28.  
  29.  
  30. ----------------------- CUT HERE AND AT BOTTOM ------------------
  31. %%HP: T(3)A(D)F(.);
  32. DIR
  33.   SOLVE
  34.     \<< SAVES FFIX
  35. DEG 0 0 0 0 0 GSUM
  36. a0 \->NUM 'A0' STO a1
  37. \->NUM 'A1' STO EV1
  38. \->NUM DUP '\Ga1' STO
  39. EIGEN 'E1' STO EV3
  40. \->NUM DUP '\Ga3' STO
  41. EIGEN 'E3' STO EV2
  42. \->NUM DUP '\Ga2' STO
  43. EIGEN 'E2' STO R E1
  44. DOT '\Gb1' STO
  45.       IF '\Ga1==0 AND
  46. \Gb1==0'
  47.       THEN
  48. "AMBIGUOUS SOLUTION"
  49. MESS KILL
  50.       END R E2 DOT
  51. '\Gb2' STO R E3 DOT
  52. '\Gb3' STO 'G\Gm' '\Gm' {
  53. \GmST LBND UBND }
  54. ROOT DROP
  55.       IF '\Gm>\Ga1 OR \Gm
  56. <LBND'
  57.       THEN
  58. "ROOT ERROR"
  59.       END UVW OUT
  60. CLLCD "Update DR?"
  61. 2 DISP DUP2 \->STR 4
  62. DISP \->STR 5 DISP
  63. ASK
  64.       IF 11.1 ==
  65.       THEN DUP2
  66. FMT\-> 'DRLAT' STO
  67. FMT\-> 'DRLON' STO
  68.       END RESTS
  69. RESTS
  70.     \>>
  71.   ADDOB
  72.     \<< SAVES DEG
  73. RCLMENU 28 MENU \->
  74. om
  75.       \<<
  76. "Time/Altitude
  77. (hh.mmss)/"
  78. FMT +
  79. ":Time: 
  80. :H_s: " {
  81. 1 0 } 'V' 3 \->LIST
  82. INPUT OBJ\-> DTAG
  83. SWAP DTAG SWAP 0 \->
  84. TM A n
  85.         \<< TM HMS\->
  86. 'TM' STO
  87.           IF TM T1
  88. < TM T2 > BODY "T"
  89. SAME NOT AND OR
  90.           THEN
  91. "Error:Bad Time
  92. Press ENTER"
  93. MESS om MENU KILL
  94.           END A
  95. CORRECT FMT\-> 'A'
  96. STO TM GHA1 GHA2
  97. INTERP 180 RANGE TM
  98. DEC1 DEC2 INTERP
  99.           IF 'SPD\=/0
  100. '
  101.           THEN TF
  102. TM - SPD * 60 / CRS
  103. RMOVE SWAP 180
  104. RANGE SWAP
  105.           END OBS
  106.           IFERR
  107. OBJ\->
  108.           THEN 3
  109. ROLLD A { 1 3 }
  110. \->ARRY SWAP STO
  111.           ELSE OBJ\->
  112. ROT 1 + DUP 3 * 'n'
  113. STO ROT ROT \->LIST n
  114. ROLL n ROLL ROT A
  115. SWAP \->ARRY 'OBS'
  116. STO
  117.           END
  118.         \>> om MENU
  119.       \>> RESTS
  120.     \>>
  121.   SETUP
  122.     \<< RCLMENU 28
  123. MENU \-> om
  124.       \<< FFIX CLLCD
  125. 2 FREEZE MBODY
  126. TMENU "BODY?"
  127. PROMPT 'BODY' STO 0
  128. MENU
  129.         IF BODY "S"
  130. SAME
  131.         THEN
  132.           DO
  133. "SEMI-D? " FMT + SD
  134. \->FMT \->STR 'V' 2
  135. \->LIST INPUT OBJ\->
  136. FMT\-> 'SEMI' STO
  137.             IF '
  138. SEMI>.55'
  139.             THEN
  140. "TOO LARGE:PRESS ENTER"
  141. MESS
  142.             END
  143.           UNTIL '
  144. SEMI\<=.55'
  145.           END
  146.         END
  147.         IF BODY "M"
  148. SAME BODY "VM" SAME
  149. OR
  150.         THEN
  151.           DO
  152. "HParallax? " FMT +
  153. HP \->FMT \->STR 'V' 2
  154. \->LIST INPUT OBJ\->
  155. FMT\-> 'HP' STO
  156.             IF 'HP>
  157. 1.2'
  158.             THEN
  159. "TOO LARGE:PRESS ENTER"
  160. MESS
  161.             END
  162.           UNTIL 'HP
  163. <1.2'
  164.           END
  165.         END
  166.         IF BODY "M"
  167. SAME BODY "S" SAME
  168. OR
  169.         THEN CLLCD
  170. 2 FREEZE MLIMB
  171. TMENU "Limb?"
  172. PROMPT 'LU' STO 0
  173. MENU
  174.         END
  175.         DO
  176.           IF BODY
  177. "T" SAME
  178.           THEN
  179. "Star" ":GHA\Gg: " G\Gg
  180. \->FMT \->STR +
  181. "
  182. :SHA: 
  183. :DEC: 
  184. " +
  185. ":TIM: " T\Gg \->HMS
  186. \->STR + + { 1 0 }
  187. 'V' 3 \->LIST INPUT
  188. OBJ\-> HMS\-> DUP 'T1'
  189. STO DUP 'T\Gg' STO 1
  190. + 'T2' STO FMT\-> DUP
  191. 'DEC1' STO 'DEC2'
  192. STO FMT\-> SWAP FMT\->
  193. DUP 'G\Gg' STO + DUP
  194. 'GHA1' STO
  195. 15.041067 + 'GHA2'
  196. STO
  197.           ELSE
  198. "Linear Interp 1" {
  199. ":GHA1: 
  200. :DEC1: 
  201. :TIM1: "
  202. { 1 0 } V } INPUT
  203. OBJ\-> HMS\-> 'T1' STO
  204. FMT\-> 'DEC1' STO
  205. FMT\-> 'GHA1' STO
  206. "Linear Interp 2" {
  207. ":GHA2: 
  208. :DEC2: 
  209. :TIM2: "
  210. { 1 0 } V } INPUT
  211. OBJ\-> HMS\-> 'T2' STO
  212. FMT\-> 'DEC2' STO
  213. FMT\-> 'GHA2' STO
  214.           END
  215.           IF 'T1\>=T2
  216. '
  217.           THEN
  218. "Err:T1\>=T2:Press ENTER"
  219. MESS
  220.           END
  221.           IF 'GHA1>
  222. GHA2'
  223.           THEN
  224. "GHA1>GHA2:Hit ENTER"
  225. MESS
  226.           END
  227.         UNTIL 'T1<
  228. T2 AND GHA1\<=GHA2'
  229.         END
  230.         IF 'SPD\=/0'
  231.         THEN DR 4
  232. FIX
  233. "TIME OF FIX? (hms)"
  234. TF \->HMS \->STR 'V' 2
  235. \->LIST INPUT OBJ\->
  236. HMS\-> 'TF' STO FFIX
  237.         END om MENU
  238.       \>>
  239.     \>>
  240.   INIT
  241.     \<< RCLMENU 28
  242. MENU \-> om
  243.       \<< FFIX { {
  244. "INDEX" {
  245.         \<< 0 MENU
  246. "INDEX? " FMT +
  247. INDX \->FMT "INDEX"
  248. \->TAG \->STR { 1 0 }
  249. 'V' 3 \->LIST INPUT
  250. OBJ\-> FMT\-> 'INDX'
  251. STO 0 CONT
  252.         \>> } } {
  253. "HEIGHT" {
  254.         \<< 0 MENU
  255. "HEIGHT? (m)" HGT
  256. "HGT" \->TAG \->STR { 1
  257. 0 } 'V' 3 \->LIST
  258. INPUT OBJ\-> '1_m'
  259. DOUNIT 'HGT' STO 0
  260. CONT
  261.         \>> } } {
  262. "C/S" {
  263.         \<< 0 MENU
  264. "Motion? (True/Knots)"
  265. ":COURSE: " CRS
  266. \->FMT \->STR +
  267. "
  268. :SPEED: " SPD
  269. \->STR + + { 1 0 }
  270. 'V' 3 \->LIST INPUT
  271. OBJ\-> '1_knot'
  272. DOUNIT 'SPD' STO
  273. FMT\-> 180 RANGE
  274. 'CRS' STO 0 CONT
  275.         \>> } } {
  276. "P/T" {
  277.         \<< 0 MENU
  278. "ENTER for std cond"
  279. {
  280. ":PRESS (mb): 1010
  281. :TEMPER (C): 10"
  282. -14 V } INPUT OBJ\->
  283. '1_\^oC' DOUNIT
  284. 'TMPTR' STO '1_mbar
  285. ' DOUNIT 'PRESS'
  286. STO 0 CONT
  287.         \>> } } {
  288. "FORMAT" {
  289.         \<< 0 MENU
  290. FFMT 1 +
  291.           IF DUP 3
  292. ==
  293.           THEN DROP
  294. 0
  295.           END
  296. 'FFMT' STO
  297.           CASE '
  298. FFMT==2'
  299.             THEN
  300. "(decimal)"
  301.             END '
  302. FFMT==1'
  303.             THEN
  304. "(dd.mmt)"
  305.             END '
  306. FFMT==0'
  307.             THEN
  308. "(dd.mmss)"
  309.             END
  310.           END 'FMT'
  311. STO FFIX 0 CONT
  312.         \>> } } {
  313. "EXIT" {
  314.         \<< 1 CONT
  315.         \>> } } }
  316. TMENU
  317.         DO CLLCD
  318. "INDEX  " INDX \->FMT
  319. \->STR + 2 DISP
  320. "HEIGHT " HGT \->STR
  321. "m" + + 3 DISP 1
  322. FIX "MOTION " CRS
  323. \->FMT \->STR + "T " +
  324. SPD \->STR + "kn" + 4
  325. DISP "P/T    "
  326. PRESS \->STR "mb " +
  327. TMPTR \->STR + "C" +
  328. + 5 DISP FFIX
  329. "FORMAT "
  330.           CASE '
  331. FFMT==2'
  332.             THEN
  333. "Decimal"
  334.             END '
  335. FFMT==1'
  336.             THEN
  337. "HMT"
  338.             END '
  339. FFMT==0'
  340.             THEN
  341. "HMS"
  342.             END "?"
  343.           END + 6
  344. DISP 3 FREEZE HALT
  345. 0 MENU
  346.         UNTIL
  347.         END om MENU
  348.       \>>
  349.     \>>
  350.   ADDDR
  351.     \<< SAVES 0
  352. RCLMENU 28 MENU \-> n
  353. om
  354.       \<< OBS
  355.         IFERR OBJ\->
  356.         THEN DROP 0
  357.         ELSE OBJ\->
  358. DROP DROP
  359.         END 'n' STO
  360. FMT DRLAT \->FMT
  361. "DR_LAT" \->TAG \->STR
  362. "
  363. " + DRLON \->FMT
  364. "DR_LON" \->TAG \->STR
  365. + { 1 0 } 'V' 3
  366. \->LIST 28 MENU INPUT
  367. 0 MENU OBJ\-> DTAG
  368. FMT\-> SWAP DTAG FMT\->
  369. 90 n 1 + 3 2 \->LIST
  370. \->ARRY 'OBS' STO om
  371. MENU
  372.       \>> RESTS
  373.     \>>
  374.   DR
  375.     \<< RCLMENU 28
  376. MENU \-> om
  377.       \<< FFIX
  378. "Dead Reckoning? 
  379. "
  380. FMT + DRLAT \->FMT
  381. "DR_LAT" \->TAG \->STR
  382. "
  383. " + DRLON \->FMT
  384. "DR_LON" \->TAG \->STR
  385. + { 1 0 } 'V' 3
  386. \->LIST INPUT OBJ\->
  387. FMT\-> 'DRLON' STO
  388. FMT\-> 'DRLAT' STO om
  389. MENU
  390.       \>>
  391.     \>>
  392.   PLOTP
  393.     \<< SAVES DEG
  394.       IF DEPTH 2 <
  395.       THEN
  396. "LON/LAT NOT ON STACK"
  397. MESS KILL
  398.       END 2 DUPN
  399. FMT\-> 'LAT' STO FMT\->
  400. 'LON' STO 0 0 0 0 0
  401. 0 0 0 0 0 0 0 0 0 0
  402. \-> g d a l n N sc
  403. sc\Gl ssz d0 d1 ll lm
  404. top bot
  405.       \<<
  406. "Scale? (NMiles)" {
  407. "9" -1 V } INPUT
  408. OBJ\-> ABS '1_nmi'
  409. DOUNIT
  410.         IF DUP 0 ==
  411.         THEN DROP
  412. "SCALE\=/0 PLEASE"
  413. MESS KILL
  414.         END 120 /
  415. DUP 'sc' STO LAT
  416. COS / 2.0469 * 180
  417. MIN NEG 'sc\Gl' STO
  418. ERASE { # 0h # 0h }
  419. PVIEW LON sc\Gl + LON
  420. RANGE LAT sc + 90
  421. MIN DUP 'top' STO
  422. DUP 3 ROLLD R\->C
  423. PMAX LON sc\Gl - LON
  424. RANGE LAT sc - -90
  425. MAX DUP 'bot' STO
  426. DUP 3 ROLLD R\->C
  427. PMIN - 2 / 'sc' STO
  428. OBS OBJ\-> OBJ\-> DROP2
  429. DUP 'N' STO 3 *
  430. DROPN 1 N
  431.         FOR n DEPTH
  432. 'd0' STO OBS { n 1
  433. } GET 'g' STO OBS {
  434. n 2 } GET 'd' STO
  435. OBS { n 3 } GET 'a'
  436. STO
  437.           IF 'LAT-
  438. sc>d+90-a OR LAT+sc
  439. <d-90+a'
  440.           THEN
  441.           ELSE top
  442. d 90 a - +
  443.             IF DUP
  444. 90 >
  445.             THEN
  446. 180 SWAP -
  447.             END MIN
  448. bot d 90 a - -
  449.             IF DUP
  450. -90 <
  451.             THEN
  452. 180 + NEG
  453.             END MAX
  454.             IF LAT
  455. d <
  456.             THEN
  457. SWAP
  458.             END
  459. DUP2 SWAP - DUP
  460. SIGN
  461.             IF DUP
  462. 0 ==
  463.             THEN
  464. DROP 1
  465.             END
  466. SWAP ABS 90 a -
  467. PSCALE sc 32 / MAX
  468. * 'ssz' STO DUP
  469. 'lm' STO SWAP DUP
  470. 'll' STO - ssz /
  471. CEIL 0 SWAP
  472.             FOR l g
  473. d a l ssz * ll +
  474. DUP lm
  475.               IF '
  476. ssz<0'
  477.               THEN
  478. SWAP
  479.               END
  480.               IF >
  481.               THEN
  482. DROP lm
  483.               END
  484. LOP DUP C\->R SWAP g
  485. - NEG g + LON RANGE
  486. SWAP R\->C DEPTH d0 -
  487. ROLLD
  488.             NEXT
  489. DEPTH d0 - 2 / 2 +
  490. 'd1' STO
  491.             WHILE
  492. DEPTH d0 - DUP 1 >
  493.             REPEAT
  494.               IF d1
  495. \=/
  496.               THEN
  497. OVER SWAP
  498.               END
  499. LIMIT LINE
  500.             END
  501. DEPTH d0 - DROPN
  502.           END
  503.         NEXT LAT
  504. COS DUP LON
  505. .0083333 ROT / -
  506. LAT R\->C SWAP LON
  507. .0083333 ROT / +
  508. LAT R\->C LINE LON
  509. LAT .0083333 - R\->C
  510. LON LAT .0083333 +
  511. R\->C LINE
  512.       \>> { } PVIEW
  513. RESTS
  514.     \>>
  515.   ADV
  516.     \<< SAVES DEG
  517. RCLMENU 28 MENU \->
  518. om
  519.       \<< 0 0 0 0 0 0
  520. \-> \Gh d \Gl l n n3
  521.         \<<
  522. "Motion? (nmi,deg true)"
  523. {
  524. ":DISTANCE: 
  525. :COURSE: "
  526. { 1 0 } V } INPUT
  527. OBJ\-> FMT\-> 180 RANGE
  528. '\Gh' STO '1_nmi'
  529. DOUNIT
  530.           IF 'SPD\=/0
  531. '
  532.           THEN DUP
  533. SPD / 'TF' STO+
  534.           END 60 /
  535. 'd' STO 2 FIX CLLCD
  536. "Old DR: " DRLAT
  537. \->FMT \->STR + " " +
  538. DRLON \->FMT \->STR + 4
  539. DISP OBS
  540.           IFERR
  541. OBJ\->
  542.           THEN DROP
  543.           ELSE OBJ\->
  544. DROP SWAP DUP 'n'
  545. STO * 'n3' STO 1 n
  546.             FOR I I
  547. 1 DISP 3 ROLLD 'l'
  548. STO '\Gl' STO \Gl l d \Gh
  549. RMOVE SWAP 180
  550. RANGE SWAP ROT n3
  551. ROLLD n3 ROLLD n3
  552. ROLLD
  553.             NEXT {
  554. n 3 } \->ARRY 'OBS'
  555. STO
  556.           END DRLON
  557. DRLAT d \Gh CCMOVE
  558. 'DRLAT' STO 'DRLON'
  559. STO "New DR: "
  560. DRLAT \->FMT \->STR +
  561. " " + DRLON \->FMT
  562. \->STR + 5 DISP FFIX
  563. 2 FREEZE
  564.         \>> om MENU
  565.       \>> RESTS
  566.     \>>
  567.   SAIL
  568.     \<< SAVES RCLMENU
  569. 28 MENU \-> om
  570.       \<< DEG 0 0 \->
  571. fr\Gl frl
  572.         \<< "From? "
  573. FMT + DRLAT \->FMT
  574. "Lat" \->TAG \->STR "
  575. "
  576. + DRLON \->FMT "Lon"
  577. \->TAG \->STR + { 1 0 }
  578. 'V' 3 \->LIST INPUT
  579. OBJ\-> FMT\-> 'fr\Gl' STO
  580. FMT\-> 'frl' STO
  581. "TO? " FMT + tol
  582. \->FMT "Lat" \->TAG
  583. \->STR "
  584. " + to\Gl \->FMT
  585. "Lon" \->TAG \->STR + {
  586. 1 0 } 'V' 3 \->LIST
  587. INPUT OBJ\-> FMT\->
  588. 'to\Gl' STO FMT\->
  589. 'tol' STO CLLCD 2
  590. FREEZE { { "RHUMB"
  591.           \<< 0 MENU
  592. frl fr\Gl tol to\Gl
  593. RHUMB 0 CONT
  594.           \>> } {
  595. "GC"
  596.           \<< 0 MENU
  597. frl fr\Gl tol to\Gl GC
  598. 0 CONT
  599.           \>> } {
  600. "WAY"
  601.           \<< 0 MENU
  602. "Scale? (nmi)" { ""
  603. V } INPUT OBJ\-> '1_
  604. nmi' DOUNIT 60 /
  605. frl fr\Gl tol to\Gl WAY
  606. 0 CONT
  607.           \>> } {
  608. "VERT"
  609.           \<< 0 MENU
  610. frl fr\Gl tol to\Gl
  611. VERTEX 0 CONT
  612.           \>> } {
  613. "COMP"
  614.           \<< 0 MENU
  615. "Composite" {
  616. ":Lat Limit: 
  617. :Scale: "
  618. { 1 0 } V } INPUT
  619. OBJ\-> '1_nmi' DOUNIT
  620. 60 / SWAP FMT\-> frl
  621. fr\Gl tol to\Gl COMP 0
  622. CONT
  623.           \>> } {
  624. "EXIT"
  625.           \<< 1 CONT
  626.           \>> } }
  627. TMENU
  628.           DO
  629. "Type?" PROMPT 0
  630. MENU
  631.           UNTIL
  632.           END
  633.         \>> om MENU
  634.       \>> RESTS
  635.     \>>
  636.   WVIEW
  637.     \<< 2 FIX { }
  638. SWAP { } 1 1 1 1
  639. "Lat Lon Crs " FMT
  640. + 5 \->LIST DBR
  641.       IF 1 \=/
  642.       THEN DROP2
  643.       ELSE SWAP
  644. DROP SWAP DUP ROT
  645. GET
  646.       END FFIX
  647.     \>>
  648.   ERROR
  649.     \<< SAVES DEG 0 0
  650. 0 0 0 0 0 0 \-> H1 H2
  651. D1 D2 G1 G2 DT DH
  652.       \<< OBS { 1 3 }
  653. GET 'H1' STO OBS {
  654. N 3 } GET 'H2' STO
  655. OBS { 1 2 } GET
  656. 'D1' STO OBS { N 2
  657. } GET 'D2' STO OBS
  658. { 1 1 } GET 'G1'
  659. STO OBS { N 1 } GET
  660. 'G2' STO T2 T1 -
  661. GHA2 GHA1 - / G2 G1
  662. - * 'DT' STO H2 H1
  663. - 'DH' STO 1 DT / N
  664. \v/ / 57.3 H1 H2 + 2
  665. / COS * * 225 D1 D2
  666. + 2 / COS SQ * DH
  667. DT / SQ - \v/ / "ERR"
  668. \->TAG
  669.       \>> RESTS
  670.     \>>
  671.   DRLAT
  672. 37.0204655112
  673.   DRLON
  674. 51.455945662
  675.   CORRECT
  676.     \<< DEG FMT\-> INDX
  677. + HGT \v/ .0293 * -
  678. DUP DUP REFRACT
  679. SWAP COS
  680.       CASE BODY "S"
  681. SAME
  682.         THEN
  683. .002443 * SEMI
  684.         END BODY
  685. "M" SAME
  686.         THEN HP *
  687. HP .272476 *
  688.         END BODY
  689. "VM" SAME
  690.         THEN HP * 0
  691.         END 0 * 0
  692.       END LU * +
  693. SWAP - + \->FMT
  694.     \>>
  695.   RHUMB
  696.     \<< \-> frl fr\Gl tol
  697. to\Gl
  698.       \<< DEG to\Gl fr\Gl
  699. RANGE 'to\Gl' STO 'LN
  700. (TAN(45+tol/2)/TAN(
  701. 45+frl/2))' \->NUM '-
  702. \pi/180*(to\Gl-fr\Gl)'
  703. \->NUM R\->C ARG 180
  704. RANGE DUP \->FMT
  705. "COURSE" \->TAG SWAP
  706.         IF DUP COS
  707. ABS .0001 >
  708.         THEN COS
  709. tol frl - SWAP /
  710.         ELSE to\Gl
  711. fr\Gl - tol frl + 2 /
  712. COS * SWAP SIN /
  713. ABS
  714.         END 60 *
  715. "DIST" \->TAG
  716.       \>>
  717.     \>>
  718.   GC
  719.     \<< \-> frl fr\Gl tol
  720. to\Gl
  721.       \<< DEG 'COS(
  722. frl)*TAN(tol)-SIN(
  723. frl)*COS(to\Gl-fr\Gl)'
  724. \->NUM 'SIN(fr\Gl-to\Gl)'
  725. \->NUM R\->C ARG 180
  726. RANGE \->FMT "COURSE"
  727. \->TAG 'ACOS(SIN(frl)
  728. *SIN(tol)+COS(frl)*
  729. COS(tol)*COS(to\Gl-
  730. fr\Gl))' \->NUM 60 *
  731. "DIST" \->TAG
  732.       \>>
  733.     \>>
  734.   COMP
  735.     \<< 0 0 0 0 0 0 0
  736. 0 \-> scl ll frl fr\Gl
  737. tol to\Gl vl v\Gl fc\Gl
  738. tc\Gl n d d0 sn
  739.       \<< DEG frl fr\Gl
  740. tol to\Gl VERTEX fr\Gl
  741. RANGE 'v\Gl' STO 'vl'
  742. STO to\Gl fr\Gl RANGE
  743. 'tc\Gl' STO
  744.         IF 'vl*SIGN
  745. (ll)\<=ABS(ll)' 'ABS(
  746. v\Gl-(fr\Gl+tc\Gl)/2)>ABS
  747. ((fr\Gl-tc\Gl)/2)AND
  748. ABS(vl)\=/90 AND ABS(
  749. ll-(frl+tol)/2)\>=ABS
  750. ((frl-tol)/2)' OR
  751.         THEN
  752. "GC is OK: Hit ENTER"
  753. MESS
  754.         ELSE DEPTH
  755. 'd0' STO to\Gl fr\Gl
  756. RANGE fr\Gl
  757.           IF <
  758.           THEN 1
  759.           ELSE -1
  760.           END 'sn'
  761. STO
  762.           IFERR ll
  763. TAN INV DUP frl TAN
  764. * ACOS NEG sn * fr\Gl
  765. + 0 RANGE 'fc\Gl' STO
  766. tol TAN * ACOS sn *
  767. to\Gl + 0 RANGE 'tc\Gl'
  768. STO
  769.           THEN
  770. DEPTH d0 - DROPN
  771. "No sol'n: Hit ENTER"
  772. MESS
  773.           ELSE scl
  774. frl fr\Gl ll fc\Gl WAY
  775. DROP 'd' STO+ OBJ\->
  776. 'n' STO
  777.             IF 'RND
  778. (fc\Gl,6)\=/RND(tc\Gl,6)'
  779.             THEN
  780. OBJ\-> SWAP DROP ll
  781. fc\Gl ll tc\Gl RHUMB
  782. 'd' STO+ SWAP \->LIST
  783.             ELSE
  784. DROP -1 'n' STO+
  785.             END scl
  786. ll tc\Gl tol to\Gl WAY
  787. DROP 'd' STO+ OBJ\->
  788. n + \->LIST d "DIST"
  789. \->TAG
  790.           END
  791.         END
  792.       \>>
  793.     \>>
  794.   VERTEX
  795.     \<< 0 \-> frl fr\Gl
  796. tol to\Gl C
  797.       \<< DEG frl fr\Gl
  798. tol to\Gl GC DROP
  799. FMT\-> DUP 'C' STO
  800. DUP SIN frl COS *
  801. ABS ACOS frl 0 \>= 1
  802. -1 IFTE *
  803.         IF DUP 0 ==
  804.         THEN SWAP
  805. DROP 0
  806.         ELSE DUP
  807. ROT COS SWAP SIN /
  808. ASIN NEG
  809.           IF 'C>180
  810. '
  811.           THEN NEG
  812.           END fr\Gl +
  813.           IF 'ABS(
  814. tol)>ABS(frl)AND
  815. SIGN(tol)\=/SIGN(frl)
  816. '
  817.           THEN 180
  818. + SWAP NEG SWAP
  819.           END 0
  820. RANGE
  821.         END \->FMT
  822. "V_Lon" \->TAG SWAP
  823. \->FMT "V_Lat" \->TAG
  824. SWAP
  825.       \>>
  826.     \>>
  827.   WAY
  828.     \<< \-> scl frl fr\Gl
  829. tol to\Gl
  830.       \<< DEG 0 frl
  831. fr\Gl tol to\Gl GC SWAP
  832. DROP 60 / frl fr\Gl
  833. GETV DUP tol to\Gl
  834. GETV CROSS DUP ABS
  835.         IF DUP 0 ==
  836.         THEN DROP2
  837.           IF 'RND(
  838. frl,6)\=/RND(tol,6)OR
  839. RND(fr\Gl,6)\=/RND(to\Gl,
  840. 6)'
  841.           THEN
  842. "Ambiguous Sol'n" 3
  843. DISP
  844.           END 0 fr\Gl
  845. 90 - GETV
  846.         ELSE /
  847.         END NEG 0 0
  848. \-> d gcd r n d0 dsum
  849.         \<< DEPTH
  850. 'd0' STO
  851.           WHILE 'd<
  852. gcd OR d==0'
  853.           REPEAT n
  854. r d SMOVE V\-> ASIN 3
  855. ROLLD R\->C ARG 'd'
  856. scl STO+
  857.           END tol
  858. to\Gl gcd scl / FLOOR
  859. 2 + 'n' STO DUP2
  860. "N/A" ROT \->FMT ROT
  861. \->FMT ROT 3 \->LIST
  862. DEPTH d0 - ROLLD 1
  863. n 1 -
  864.           START 4
  865. DUPN RHUMB 'dsum'
  866. STO+ 3 ROLLD DROP2
  867. 3 ROLLD DUP2 5 ROLL
  868. ROT \->FMT ROT \->FMT
  869. ROT 3 \->LIST DEPTH
  870. d0 - ROLLD
  871.           NEXT
  872. DROP2 n \->LIST dsum
  873. DUP "DIST" \->TAG
  874. SWAP gcd 60 * - '1_
  875. nmi' \->UNIT "ADDD"
  876. \->TAG
  877.         \>>
  878.       \>>
  879.     \>>
  880.   DOUNIT
  881.     \<< -55 CF
  882.       IFERR CONVERT
  883.       THEN DROP
  884.       END UVAL
  885.     \>>
  886.   SD
  887.     \<< 0 \-> x
  888.       \<< DATE DUP
  889. 100 * FP 100 / 1.01
  890. + SWAP DDAYS 183 -
  891. 183 / 'x' STO '(
  892. 15.762145+x*(
  893. -.02513+x*(1.15068+
  894. x*(.02604+x*-.62672
  895. ))))/60' \->NUM
  896.       \>>
  897.     \>>
  898.   RMOVE
  899.     \<< 0 0 0 0 \-> \Gl l
  900. d \Gh d\Gl dl n\Gl nl
  901.       \<< DRLON DRLAT
  902. d \Gh CCMOVE DUP 'nl'
  903. STO DRLAT - 'dl'
  904. STO DUP 'n\Gl' STO
  905. DRLON - 'd\Gl' STO l
  906. \Gl d\Gl + GETV n\Gl 90 +
  907. DUP COS SWAP SIN 0
  908. \->V3 SWAP dl SMOVE
  909. V\-> ASIN 3 ROLLD R\->C
  910. ARG SWAP
  911.       \>>
  912.     \>>
  913.   SMOVE
  914.     \<< \-> n r d
  915.       \<< d COS r * n
  916. n r DOT * 1 d COS -
  917. * + r n CROSS d SIN
  918. * +
  919.       \>>
  920.     \>>
  921.   CCMOVE
  922.     \<< 0 \-> \Gl l d \Gh
  923. l2
  924.       \<< l d \Gh MER l
  925. + DUP 'l2' STO
  926.         IF DUP ABS
  927. 90 \>=
  928.         THEN SIGN
  929. 90 * \Gl SWAP
  930.         ELSE
  931.           IF 'ABS(
  932. COS(\Gh))<.0001'
  933.           THEN '
  934. -.998208257*d*SIN(\Gh
  935. )/COS((l+l2)/2)*\v/(1
  936. -(ee*SIN((l+l2)/2))
  937. ^2)' \->NUM
  938.           ELSE l l2
  939. \Gh DLo
  940.           END \Gl +
  941. SWAP
  942.         END
  943.       \>>
  944.     \>>
  945.   MER
  946.     \<< \-> l1 d \Gh
  947.       \<< '
  948. .998208256722/(1-ee
  949. ^2)*\.S(l1,l1+d*COS(\Gh
  950. ),(1-(ee*SIN(l))^2)
  951. ^1.5,l)' \->NUM
  952.       \>>
  953.     \>>
  954.   DLo
  955.     \<< 0 0 \-> l1 l2 \Gh
  956. sl1 sl2
  957.       \<< l1 SIN
  958. 'sl1' STO l2 SIN
  959. 'sl2' STO '
  960. -57.2957795131*TAN(
  961. \Gh)*(ATANH((sl2-sl1)
  962. /(1-sl1*sl2))-ee*
  963. ATANH(ee*(sl2-sl1)/
  964. (1-ee^2*sl2*sl1)))'
  965. \->NUM
  966.       \>>
  967.     \>>
  968.   GETV
  969.     \<< \-> l \Gl
  970.       \<< l COS \Gl COS
  971. * l COS \Gl SIN * l
  972. SIN \->V3
  973.       \>>
  974.     \>>
  975.   ee
  976. 8.18188106628E-2
  977.   FMT "(dd.mmt)"
  978.   FFMT 1
  979.   FFIX
  980.     \<<
  981.       IF 'FFMT==1'
  982.       THEN 3 FIX
  983.       ELSE 4 FIX
  984.       END
  985.     \>>
  986.   FMT\->
  987.     \<<
  988.       CASE 'FFMT==1
  989. '
  990.         THEN HMT\->
  991.         END 'FFMT==
  992. 0'
  993.         THEN HMS\->
  994.         END
  995.       END
  996.     \>>
  997.   \->FMT
  998.     \<<
  999.       CASE 'FFMT==1
  1000. '
  1001.         THEN \->HMT
  1002.         END 'FFMT==
  1003. 0'
  1004.         THEN \->HMS
  1005.         END
  1006.       END
  1007.     \>>
  1008.   \->HMT
  1009.     \<< 4 RND DUP IP
  1010. SWAP FP .6 * +
  1011.     \>>
  1012.   HMT\->
  1013.     \<< DUP IP SWAP
  1014. FP 1.66666667 * +
  1015.     \>>
  1016.   SVSTK {
  1017. # 81388003E00FF4h
  1018. # 0h }
  1019.   RESTS
  1020.     \<< SVSTK STOF
  1021. FFIX
  1022.     \>>
  1023.   SAVES
  1024.     \<< RCLF 'SVSTK'
  1025. STO -20 CF -21 CF
  1026. -22 SF -55 CF
  1027.     \>>
  1028.   \GmST
  1029.     \<< 0 0 0 \-> s2 s3
  1030. s4
  1031.       \<< 2 SK 's2'
  1032. STO 3 SK 's3' STO 4
  1033. SK 's4' STO '(-s3+\v/
  1034. (s3^2-3*s4*(s2-1)))
  1035. /(3*s4)' \->NUM RE
  1036. UBND MIN
  1037.       \>>
  1038.     \>>
  1039.   UBND
  1040.     \<< \Ga1 \Gb1 ABS -
  1041. \Ga2 \Gb2 ABS - \Ga3 \Gb3
  1042. ABS - MIN MIN
  1043.     \>>
  1044.   LBND
  1045.     \<< \Ga1
  1046. 1.73205080757 \Gb1
  1047. ABS * - \Ga2
  1048. 1.73205080757 \Gb2
  1049. ABS * - \Ga3
  1050. 1.73205080757 \Gb3
  1051. ABS * - MIN MIN
  1052.     \>>
  1053.   SK
  1054.     \<< \-> k
  1055.       \<< '\Gb1^2/\Ga1^k+
  1056. \Gb2^2/\Ga2^k+\Gb3^2/\Ga3^k
  1057. ' \->NUM
  1058.       \>>
  1059.     \>>
  1060.   G\Gm
  1061.     \<< \Gb1 \Ga1 \Gm - /
  1062. SQ \Gb2 \Ga2 \Gm - / SQ +
  1063. \Gb3 \Ga3 \Gm - / SQ + 1
  1064. -
  1065.     \>>
  1066.   ASK
  1067.     \<< { "YES" "" ""
  1068. "" "" "NO" } TMENU
  1069. 0
  1070.       DO DROP -1
  1071. WAIT
  1072.       UNTIL DUP {
  1073. 11.1 16.1 } SWAP
  1074. POS DUP
  1075.         IF NOT
  1076.         THEN 880 .1
  1077. BEEP
  1078.         END
  1079.       END 0 MENU
  1080.     \>>
  1081.   MLIMB { { "LL"
  1082.     \<< 1 CONT
  1083.     \>> } "" { "UL"
  1084.     \<< -1 CONT
  1085.     \>> } "" { "CENT"
  1086.     \<< 0 CONT
  1087.     \>> } "" }
  1088.   MBODY { { "SUN"
  1089.     \<< "S" CONT
  1090.     \>> } { "MOON"
  1091.     \<< "M" CONT
  1092.     \>> } { "VENUS"
  1093.     \<< "VM" CONT
  1094.     \>> } { "MARS"
  1095.     \<< "VM" CONT
  1096.     \>> } { "PLANET"
  1097.     \<< "P" CONT
  1098.     \>> } { "STAR"
  1099.     \<< "T" CONT
  1100.     \>> } }
  1101.   PSCALE
  1102.     \<< \-> s a
  1103.       \<<
  1104.         IF 's\=/0'
  1105.         THEN 'a/(
  1106. 360+a/s)' \->NUM
  1107.         ELSE 0
  1108.         END
  1109.       \>>
  1110.     \>>
  1111.   tol 10
  1112.   to\Gl 10
  1113.   LON 89.7214000014
  1114.   LAT 10.5730000011
  1115.   IERR
  1116. 1.6606266327E-3
  1117.   LIMIT
  1118.     \<< 0 0 0 0 0 0 \->
  1119. g1 g2 d1 d2 d180 up
  1120.       \<< DUP2 C\->R
  1121. 'd1' STO 'g1' STO
  1122. C\->R 'd2' STO 'g2'
  1123. STO
  1124.         IF 'ABS(g1-
  1125. g2)>180'
  1126.         THEN DROP2
  1127. LON 180
  1128.           IF 'g1>
  1129. LON'
  1130.           THEN +
  1131.           ELSE -
  1132.           END 'up'
  1133. STO 'd1+(up-g1)*(d1
  1134. -d2)/(g1-g2)' \->NUM
  1135. 'd180' STO g2 d2
  1136. R\->C up 360
  1137.           IF 'up>
  1138. LON'
  1139.           THEN -
  1140.           ELSE +
  1141.           END d180
  1142. R\->C up d180 R\->C g1
  1143. d1 R\->C LINE
  1144.         END
  1145.       \>>
  1146.     \>>
  1147.   RANGE
  1148.     \<< \-> \Gl
  1149.       \<<
  1150.         WHILE DUP
  1151. 180 \Gl + >
  1152.         REPEAT 360
  1153. -
  1154.         END
  1155.         WHILE DUP
  1156. -180 \Gl + <
  1157.         REPEAT 360
  1158. +
  1159.         END
  1160.       \>>
  1161.     \>>
  1162.   LOP
  1163.     \<< \-> g d a l
  1164.       \<<
  1165.         IF 'ABS(l)\=/
  1166. 90'
  1167.         THEN 'g+
  1168. ACOS((SIN(a)-SIN(l)
  1169. *SIN(d))/(COS(l)*
  1170. COS(d)))' \->NUM
  1171.         ELSE g
  1172.         END DUP IM
  1173.         IF 0 \=/
  1174.         THEN DROP g
  1175.         END
  1176.         IF 'ABS(l)>
  1177. 90-ABS(d)+a'
  1178.         THEN 180 +
  1179.         END LON
  1180. RANGE l R\->C
  1181.       \>>
  1182.     \>>
  1183.   CST { SOLVE ADDOB
  1184. SETUP INIT ADV
  1185. ADDDR DR PLOTP SAIL
  1186. WVIEW ERROR TIME }
  1187.   REFRACT
  1188.     \<< 0 \-> h rp
  1189.       \<< '1/TAN(h+
  1190. 7.31/(h+4.4))' \->NUM
  1191. 'rp' STO 'rp*((
  1192. PRESS-80)/930)/(1+
  1193. .00008*(rp+39)*(
  1194. TMPTR-10))' \->NUM 60
  1195. /
  1196.       \>>
  1197.     \>>
  1198.   MESS
  1199.     \<< 3 DISP 7
  1200. FREEZE 0 WAIT DROP
  1201.     \>>
  1202.   PPAR {
  1203. (90.5890052687,10.1563333344)
  1204. (88.8537947341,10.9896666678)
  1205. X 0 (0,0) FUNCTION
  1206. Y }
  1207.   T\Gg 6
  1208.   G\Gg 231.103333334
  1209.   PRESS 1010
  1210.   TMPTR 10
  1211.   a0 '-(G12*G23-G13
  1212. *G22)*G13+(G11*G23-
  1213. G12*G13)*G23-(G11*
  1214. G22-G12^2)*G33'
  1215.   a1 'G11*G22-G12^2
  1216. +G11*G33-G13^2+G22*
  1217. G33-G23^2'
  1218.   TF 213.112966667
  1219.   CRS 320
  1220.   SPD 0
  1221.   EV3 '-2*\v/Q*COS((\Gh
  1222. +360)/3)+N/3'
  1223.   EV2 'N-\Ga1-\Ga3'
  1224.   EV1 '-2*\v/Q*COS(\Gh/
  1225. 3)+N/3'
  1226.   \Gm -.178280167539
  1227.   \Gb3 2.75456498847
  1228.   \Gb2
  1229. 4.61233514353E-2
  1230.   \Gb1
  1231. 1.14190212639E-2
  1232.   E3
  1233. [ .338319152137 .168945881156 .925741562499 ]
  1234.   E2
  1235. [ .676618904731 .64002613719 -.364078839641 ]
  1236.   E1
  1237. [ -.65400841667 .749549086407 .102221123028 ]
  1238.   INTERP
  1239.     \<< \-> T V1 V2
  1240.       \<< V1 V2 V1 -
  1241. T2 T1 - / T T1 - *
  1242. +
  1243.       \>>
  1244.     \>>
  1245.   GSUM
  1246.     \<< \-> DS DC GS GC
  1247. HS
  1248.       \<< 0 'G11' STO
  1249. 0 'G12' STO 0 'G13'
  1250. STO 0 'G22' STO 0
  1251. 'G23' STO { 3 } 0
  1252. CON 'R' STO OBS
  1253. OBJ\-> OBJ\-> DROP DROP
  1254. 'N' STO 1 N
  1255.         START SIN
  1256. 'HS' STO DUP SIN
  1257. 'DS' STO COS 'DC'
  1258. STO DUP SIN 'GS'
  1259. STO COS 'GC' STO DS
  1260. SQ 'G11' STO+ DS DC
  1261. GC * * 'G12' STO+
  1262. DS DC GS * * 'G13'
  1263. STO+ DC SQ GC SQ *
  1264. 'G22' STO+ DC SQ GS
  1265. GC * * 'G23' STO+ R
  1266. OBJ\-> DROP DC GS HS
  1267. * * + ROT DS HS * +
  1268. ROT DC GC HS * * +
  1269. ROT { 3 } \->ARRY 'R'
  1270. STO
  1271.         NEXT N G11
  1272. G22 + - 'G33' STO
  1273.       \>>
  1274.     \>>
  1275.   OUT
  1276.     \<< OBJ\-> DROP \-> U
  1277. V W
  1278.       \<<
  1279.         IF 'ABS(U)>
  1280. 1'
  1281.         THEN U SIGN
  1282. 'U' STO
  1283.         END U ASIN
  1284. V W R\->C ARG \->FMT
  1285. "LON" \->TAG SWAP
  1286. \->FMT "LAT" \->TAG
  1287.       \>>
  1288.     \>>
  1289.   UVW
  1290.     \<< \Gb1 \Ga1 \Gm - /
  1291. E1 * \Gb2 \Ga2 \Gm - / E2
  1292. * \Gb3 \Ga3 \Gm - / E3 *
  1293. + +
  1294.     \>>
  1295.   EIGEN
  1296.     \<< \-> EV
  1297.       \<< 'G12*G23-
  1298. G13*G22+G13*EV'
  1299. \->NUM 'G13*G12-G11*
  1300. G23+G23*EV' \->NUM '
  1301. G11*G22-SQ(G12)-(
  1302. G11+G22)*EV+SQ(EV)'
  1303. \->NUM { 3 } \->ARRY
  1304. DUP ABS
  1305.         IF DUP 0 \=/
  1306.         THEN /
  1307.         ELSE DROP
  1308.         END
  1309.       \>>
  1310.     \>>
  1311.   \Ga2 .38067798101
  1312.   \Ga3 2.58992744633
  1313.   \Ga1 .029394572665
  1314.   \Gh 'ACOS(R1/Q^1.5)
  1315. '
  1316.   R1 'A0/2+N/3*(A1/
  1317. 6-Q)'
  1318.   Q '(N/3)^2-A1/3'
  1319.   N 3
  1320.   A0
  1321. -2.89809425646E-2
  1322.   A1 1.07324802832
  1323.   G33 2.27032850246
  1324.   R
  1325. [ .955661886936 .50345167658 2.53439002533 ]
  1326.   G23 .318611864541
  1327.   G22 .246376558567
  1328.   G13 .715412834112
  1329.   G12 .298478592826
  1330.   G11 .483294938977
  1331.   GHA2
  1332. 60.5550000011
  1333.   DEC2
  1334. 22.0816666668
  1335.   T2 12
  1336.   GHA1
  1337. 45.5566666678
  1338.   DEC1
  1339. 22.0750000002
  1340.   T1 11
  1341.   LU 1
  1342.   SEMI .26333333386
  1343.   HP .9333333352
  1344.   HGT 3.048
  1345.   INDX 0
  1346.   BODY "S"
  1347. END
  1348. ''
  1349. ----------------------- CUT HERE AND AT TOP ------------------
  1350.  
  1351.